﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;

namespace Kinematic
{
    public class Proyectil : Objetos
    {
        //Variables
        public float Tiempo_Vida;
        Vector3 Gravedad = new Vector3(0, -9.81f, 0);

        Vector3 pos_Ini;
        Vector3? u; //FiringVector
        float Velocidad_Disparo = 100.0f;

        public Vector3 Velocidad;




        public Proyectil(ContentManager content, String Ubicacion, Kinematic Lanzador, Kinematic Objetivo)
            : base(content, Ubicacion, Lanzador.Position, Lanzador.Orientation)
        {
            Tiempo_Vida = 0.0f;
            cc = Color.White;
            Fisica MotorFisico = new Fisica();

            pos_Ini = Lanzador.Position;
            u = MotorFisico.calculateFiringSolution(Lanzador.Position, Objetivo.Position, Velocidad_Disparo, Gravedad);
        }

        public Proyectil(ContentManager content, String Ubicacion, Kinematic Lanzador, Kinematic Objetivo, Color color)
            : base(content, Ubicacion, Lanzador.Position, Lanzador.Orientation)
        {
            Tiempo_Vida = 0.0f;
            this.cc = color;
            Fisica MotorFisico = new Fisica();

            pos_Ini = Lanzador.Position;
            u = MotorFisico.calculateFiringSolution(Lanzador.Position, Objetivo.Position, Velocidad_Disparo, Gravedad);
        }


        public void Update(float Time)
        {
            Tiempo_Vida += Time;
            if (this.Position.Y >= 0)
            {
                this.Position = pos_Ini + u.Value * Velocidad_Disparo * Tiempo_Vida + Gravedad * Tiempo_Vida * Tiempo_Vida / 2.0f;
                Velocidad = Gravedad * Tiempo_Vida + u.Value * Velocidad_Disparo;
            }

            base.Update();

        }

        public void Draw(SpriteBatch Batch)
        {

            float Scale = (float)Math.Cos((MathHelper.Pi * Velocidad.Y * -1) / (2 * Velocidad_Disparo * u.Value.Y)) + 1;
            Batch.Draw(this.textura, new Vector2(this.Position.X, this.Position.Z), null, cc, 0.0f, new Vector2(0, 0), Scale, SpriteEffects.None, 0);

        }

    }
}
